/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entidades;

import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author BATAQUERO
 */
@Entity
@Table(name = "estudiante")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Estudiante.findAll", query = "SELECT e FROM Estudiante e"),
    @NamedQuery(name = "Estudiante.findByIdEstudiante", query = "SELECT e FROM Estudiante e WHERE e.idEstudiante = :idEstudiante"),
    @NamedQuery(name = "Estudiante.findByCodigoEstudiante", query = "SELECT e FROM Estudiante e WHERE e.codigoEstudiante = :codigoEstudiante"),
    @NamedQuery(name = "Estudiante.findByCedulaEstudiante", query = "SELECT e FROM Estudiante e WHERE e.cedulaEstudiante = :cedulaEstudiante"),
    @NamedQuery(name = "Estudiante.findByNombresEstudiante", query = "SELECT e FROM Estudiante e WHERE e.nombresEstudiante = :nombresEstudiante"),
    @NamedQuery(name = "Estudiante.findByApellido1Estudiante", query = "SELECT e FROM Estudiante e WHERE e.apellido1Estudiante = :apellido1Estudiante"),
    @NamedQuery(name = "Estudiante.findByApellido2Estudiante", query = "SELECT e FROM Estudiante e WHERE e.apellido2Estudiante = :apellido2Estudiante"),
    @NamedQuery(name = "Estudiante.findBySemestreEstudiante", query = "SELECT e FROM Estudiante e WHERE e.semestreEstudiante = :semestreEstudiante"),
    @NamedQuery(name = "Estudiante.findByCorreoEstudiante", query = "SELECT e FROM Estudiante e WHERE e.correoEstudiante = :correoEstudiante"),
    @NamedQuery(name = "Estudiante.findByTelefonoEstudiante", query = "SELECT e FROM Estudiante e WHERE e.telefonoEstudiante = :telefonoEstudiante"),
    @NamedQuery(name = "Estudiante.findByCelularEstudiante", query = "SELECT e FROM Estudiante e WHERE e.celularEstudiante = :celularEstudiante"),
    @NamedQuery(name = "Estudiante.findByDireccionEstudiante", query = "SELECT e FROM Estudiante e WHERE e.direccionEstudiante = :direccionEstudiante"),
    @NamedQuery(name = "Estudiante.findByEpsEstudiante", query = "SELECT e FROM Estudiante e WHERE e.epsEstudiante = :epsEstudiante"),
    @NamedQuery(name = "Estudiante.findByHojaVidaEstudiante", query = "SELECT e FROM Estudiante e WHERE e.hojaVidaEstudiante = :hojaVidaEstudiante"),
    @NamedQuery(name = "Estudiante.findByAsignadoEstudiante", query = "SELECT e FROM Estudiante e WHERE e.asignadoEstudiante = :asignadoEstudiante"),
    @NamedQuery(name = "Estudiante.findByEstadoEstudiante", query = "SELECT e FROM Estudiante e WHERE e.estadoEstudiante = :estadoEstudiante"),
    @NamedQuery(name = "Estudiante.findByIdPrograma", query = "SELECT e FROM Estudiante e WHERE e.idPrograma = :idPrograma"),
    @NamedQuery(name = "Estudiante.findByAsignadoEstVisibleEstXProg", query = "SELECT e FROM Estudiante e WHERE e.idPrograma = :idPrograma AND e.asignadoEstudiante = :asignadoEstudiante AND e.estadoEstudiante = :estadoEstudiante"),
    @NamedQuery(name = "Estudiante.findByAsignadoEstVisibleEstXFacultad", query = "SELECT e FROM Estudiante e WHERE e.idPrograma.idFacultad = :idFacultad AND e.asignadoEstudiante = :asignadoEstudiante AND e.estadoEstudiante = :estadoEstudiante")})
public class Estudiante implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @Basic(optional = false)
    @NotNull
    @Column(name = "idEstudiante")
    private Integer idEstudiante;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 12)
    @Column(name = "codigoEstudiante")
    private String codigoEstudiante;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 12)
    @Column(name = "cedulaEstudiante")
    private String cedulaEstudiante;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "nombresEstudiante")
    private String nombresEstudiante;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "apellido1Estudiante")
    private String apellido1Estudiante;
    @Size(max = 45)
    @Column(name = "apellido2Estudiante")
    private String apellido2Estudiante;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 20)
    @Column(name = "semestreEstudiante")
    private String semestreEstudiante;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "correoEstudiante")
    private String correoEstudiante;
    @Size(max = 45)
    @Column(name = "telefonoEstudiante")
    private String telefonoEstudiante;
    @Size(max = 12)
    @Column(name = "celularEstudiante")
    private String celularEstudiante;
    @Size(max = 60)
    @Column(name = "direccionEstudiante")
    private String direccionEstudiante;
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 45)
    @Column(name = "EpsEstudiante")
    private String epsEstudiante;
    @Size(max = 100)
    @Column(name = "hojaVidaEstudiante")
    private String hojaVidaEstudiante;
    @Column(name = "asignadoEstudiante")
    private Boolean asignadoEstudiante;
    @Basic(optional = false)
    @NotNull
    @Column(name = "estadoEstudiante")
    private boolean estadoEstudiante;
    @JoinColumn(name = "idEstudiante", referencedColumnName = "idUsuario", insertable = false, updatable = false)
    @OneToOne(optional = false)
    private Usuario usuario;
    @JoinColumn(name = "idPrograma", referencedColumnName = "idPrograma")
    @ManyToOne(optional = false)
    private Programa idPrograma;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "estudiante")
    private List<ConvenioXPeriodoXEstudiante> convenioXPeriodoXEstudianteList;

    public Estudiante() {
    }

    public Estudiante(Integer idEstudiante) {
        this.idEstudiante = idEstudiante;
    }

    public Estudiante(Integer idEstudiante, String codigoEstudiante, String cedulaEstudiante, String nombresEstudiante, String apellido1Estudiante, String semestreEstudiante, String correoEstudiante, String epsEstudiante, boolean estadoEstudiante) {
        this.idEstudiante = idEstudiante;
        this.codigoEstudiante = codigoEstudiante;
        this.cedulaEstudiante = cedulaEstudiante;
        this.nombresEstudiante = nombresEstudiante;
        this.apellido1Estudiante = apellido1Estudiante;
        this.semestreEstudiante = semestreEstudiante;
        this.correoEstudiante = correoEstudiante;
        this.epsEstudiante = epsEstudiante;
        this.estadoEstudiante = estadoEstudiante;
    }

    public Integer getIdEstudiante() {
        return idEstudiante;
    }

    public void setIdEstudiante(Integer idEstudiante) {
        this.idEstudiante = idEstudiante;
    }

    public String getCodigoEstudiante() {
        return codigoEstudiante;
    }

    public void setCodigoEstudiante(String codigoEstudiante) {
        this.codigoEstudiante = codigoEstudiante;
    }

    public String getCedulaEstudiante() {
        return cedulaEstudiante;
    }

    public void setCedulaEstudiante(String cedulaEstudiante) {
        this.cedulaEstudiante = cedulaEstudiante;
    }

    public String getNombresEstudiante() {
        return nombresEstudiante;
    }

    public void setNombresEstudiante(String nombresEstudiante) {
        this.nombresEstudiante = nombresEstudiante;
    }

    public String getApellido1Estudiante() {
        return apellido1Estudiante;
    }

    public void setApellido1Estudiante(String apellido1Estudiante) {
        this.apellido1Estudiante = apellido1Estudiante;
    }

    public String getApellido2Estudiante() {
        return apellido2Estudiante;
    }

    public void setApellido2Estudiante(String apellido2Estudiante) {
        this.apellido2Estudiante = apellido2Estudiante;
    }

    public String getSemestreEstudiante() {
        return semestreEstudiante;
    }

    public void setSemestreEstudiante(String semestreEstudiante) {
        this.semestreEstudiante = semestreEstudiante;
    }

    public String getCorreoEstudiante() {
        return correoEstudiante;
    }

    public void setCorreoEstudiante(String correoEstudiante) {
        this.correoEstudiante = correoEstudiante;
    }

    public String getTelefonoEstudiante() {
        return telefonoEstudiante;
    }

    public void setTelefonoEstudiante(String telefonoEstudiante) {
        this.telefonoEstudiante = telefonoEstudiante;
    }

    public String getCelularEstudiante() {
        return celularEstudiante;
    }

    public void setCelularEstudiante(String celularEstudiante) {
        this.celularEstudiante = celularEstudiante;
    }

    public String getDireccionEstudiante() {
        return direccionEstudiante;
    }

    public void setDireccionEstudiante(String direccionEstudiante) {
        this.direccionEstudiante = direccionEstudiante;
    }

    public String getEpsEstudiante() {
        return epsEstudiante;
    }

    public void setEpsEstudiante(String epsEstudiante) {
        this.epsEstudiante = epsEstudiante;
    }

    public String getHojaVidaEstudiante() {
        return hojaVidaEstudiante;
    }

    public void setHojaVidaEstudiante(String hojaVidaEstudiante) {
        this.hojaVidaEstudiante = hojaVidaEstudiante;
    }

    public Boolean getAsignadoEstudiante() {
        return asignadoEstudiante;
    }

    public void setAsignadoEstudiante(Boolean asignadoEstudiante) {
        this.asignadoEstudiante = asignadoEstudiante;
    }

    public boolean getEstadoEstudiante() {
        return estadoEstudiante;
    }

    public void setEstadoEstudiante(boolean estadoEstudiante) {
        this.estadoEstudiante = estadoEstudiante;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public Programa getIdPrograma() {
        return idPrograma;
    }

    public void setIdPrograma(Programa idPrograma) {
        this.idPrograma = idPrograma;
    }

    @XmlTransient
    public List<ConvenioXPeriodoXEstudiante> getConvenioXPeriodoXEstudianteList() {
        return convenioXPeriodoXEstudianteList;
    }

    public void setConvenioXPeriodoXEstudianteList(List<ConvenioXPeriodoXEstudiante> convenioXPeriodoXEstudianteList) {
        this.convenioXPeriodoXEstudianteList = convenioXPeriodoXEstudianteList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idEstudiante != null ? idEstudiante.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Estudiante)) {
            return false;
        }
        Estudiante other = (Estudiante) object;
        if ((this.idEstudiante == null && other.idEstudiante != null) || (this.idEstudiante != null && !this.idEstudiante.equals(other.idEstudiante))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entidades.Estudiante[ idEstudiante=" + idEstudiante + " ]";
    }
    
}
